package com.birdboot.core;

import com.birdboot.controller.UserController;
import com.birdboot.http.HttpServletRequest;
import com.birdboot.http.HttpServletResponse;

import java.io.File;
import java.net.URISyntaxException;

/*
* V8新增内容;
* 该类是SpringMVC框架与Tomcat整合时的一个关键类
* Tomcat处理业务原生的都是调用继承了HttpServlet的类来完成，此时需要进行很多配置
* 以及使用时要做很多重复性劳动
* SpringMVC框架提供的该类也继承了HttpServlet的，使用它来接收处理请求的工作
* */
public class DispatcherServlet {
    private static File baseDir; //类加载路径
    private static File staticDir;//类加载路径中的static目录
    static {
        //定位当前项目的类加载路径
        try {
            baseDir = new File(
                    DispatcherServlet.class.getClassLoader().getResource(".").toURI()
            );
            //定位类加载路径下的static目录
            staticDir = new File(baseDir,"static");
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }
    /*
    * service方法实际上是当我们继承了HttpServlet后必须重写的方法
    * 该方法要求接收两个参数：请求对象与响应对象
    * Tomcat在处理请求时就是调用某个Servlet的service方法并将请求与响应对象传入来让其完成处理工作的
    * */
    public void service(HttpServletRequest request, HttpServletResponse response){
        //获取请求的抽象路径
        //不能再使用uri判断请求了，因为uri可能含有参数，内容不固定
        String path = request.getRequestURI();
        System.out.println(path);
        if("/regUser".equals(path)){
            UserController controller = new UserController();
            controller.reg(request,response);
        }else {
            File file = new File(staticDir, path);
            if (file.isFile()) {
                //由于响应对象中状态代码和描述默认值是200，OK因此正确情况下不用再设置
                response.setContentFile(file);
                response.addHeader("Server", "BirdServer");
            } else {
                response.setStatusCode(404);
                response.setStatusReason("NotFound");
                file = new File(staticDir, "404.html");
                response.setContentFile(file);

                response.addHeader("Server", "BirdServer");
            }
        }
    }
}
